<?php
/**
 * @Author: nic-tes
 * @Date:   2014-08-22 17:01:25
 * @Last Modified by:   nic-tes
 * @Last Modified time: 2014-08-26 17:25:48
 */
class Application{

	public static function run(){
		// 1.初始化框架
		self::_init_frame();
		// 2.定义外部路径
		self::_set_url();
		// 3.自动载入
		spl_autoload_register(array(__CLASS__,'_autoload'));
		// 4.创建demo(一个默认的控制器)
		self::_create_demo();
		// // 5.实例化控制器(输出 欢迎语)
		self::_app_run();
	}

	/**
	 * [_init_frame 初始化框架]
	 * @return [type] [description]
	 */
	private static function _init_frame(){
		//加载框架配置项
		C(include CONFIG_PATH . '/Config.php');
		//加载用户配置项
		$userConfig = APP_CONFIG_PATH . '/Config.php';
		//如果不是一个文件则创建一个空的Config.php
		if(!is_file($userConfig)){
			$data = <<<str
<?php
return array(
	//'配置项' => '配置值'

	);
?>
str;
			file_put_contents($userConfig, $data) || die('access not allow');

		}
		C(include $userConfig);

		//设置默认时区
		date_default_timezone_set(C('TIME_ZONE'));
		//开启session
		C('SESSION_START') && session_start();

	}

	/**
	 * [_set_url 创建外部路径]
	 */
	private static function _set_url(){
		$control = isset($_GET['c']) ? htmlspecialchars(ucfirst($_GET['c'])) : 'Index';
		$method = isset($_GET['m']) ? htmlspecialchars($_GET['m']) : 'index';
		//定义控制器常量
		define('CONTROL', $control);
		define('METHOD', $method);

		// http://localhost/c39/0822/frame-project/index.php
		define('__ROOT__', 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['SCRIPT_NAME']);
		define('__TPL__', dirname(__ROOT__) . '/' . APP_NAME . '/Tpl');
		define('__PUBLIC__', __TPL__ . '/Public');
		define('__DIRROOT__',dirname(__ROOT__));
		define('__OBJ__',__DIRROOT__.'/'.OBJ_NAME);
		
		
		//当前地址
		define('__SELF__', 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']);
	}

	/**
	 * [_autoload 自动载入]
	 * @param  [type] $className [description]
	 * @return [type]            [description]
	 */
	private static function _autoload($className){
		//如果是控制器
		if(strlen($className) > 7 && substr($className, -7) == 'Control'){
			$path = APP_CONTROL_PATH . '/' . $className . '.class.php';
			if(!is_file($path)) halt('控制器：'. $path . '不存在');
		}else{//否则是工具类
			$path = TOOL_PATH . '/' . $className . '.class.php';
			if(!is_file($path)) halt('工具类：'. $path . '不存在');
		}

		require $path;
		
	}


	private static function _create_demo(){
		$controlPath = APP_CONTROL_PATH . '/IndexControl.class.php';
		if(!is_file($controlPath)){
			$data = <<<str
<?php
/**
 * 默认控制器，方法里面代码可以删除
 */
class IndexControl extends Control{
	public function index(){
		header('Content-type:text/html;charset=utf-8');
		echo '<h2 style="margin-top:50px;margin-left:50px;">欢迎使用C39超级框架 ~O(∩_∩)O~!</h2>';
	}
}
str;
	file_put_contents($controlPath, $data) || die('access not allow');
		}


	}

	/**
	 * [_app_run 执行应用]
	 * @return [type] [description]
	 */
	private static function _app_run(){
		// var_dump(C());
		$control = CONTROL . 'Control';
		$method = METHOD;

		$obj = new $control;
		$obj->$method();
	}
}
?>